﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Controls;
using System.Windows.Input;
using WpfApplication2.Helpers;
using WpfApplication2.SindicatoWebService;
using WpfApplication2.Views;
using System.Windows;


namespace WpfApplication2.ViewModels.Afiliado
{
    public class NuevaHistoriaViewModel : ViewModel
    {
        #region properties

        public SindicatoWebService.Service1SoapClient WS;
        public Instancias Instancias { get; set; }
        
        public string NombreyApellido
        {
            get
            {
                return nombreyApellido;
            }
            set
            {
                if (nombreyApellido != value)
                {
                    nombreyApellido = value;
                    RaisePropertyChanged("NombreyApellido");
                }
            }
        }
        private string nombreyApellido;

        public PropertyElement AutovalidoTotal
        {
            get
            {
                return autovalidoTotal;
            }
            set
            {
                if (autovalidoTotal != value)
                {
                    autovalidoTotal = value;
                    RaisePropertyChanged("AutovalidoTotal");
                }
            }
        }
        private PropertyElement autovalidoTotal;

        public PropertyElement AutovalidoParcial
        {
            get
            {
                return autovalidoParcial;
            }
            set
            {
                if (autovalidoParcial != value)
                {
                    autovalidoParcial = value;
                    RaisePropertyChanged("AutovalidoParcial");
                }
            }
        }
        private PropertyElement autovalidoParcial;

        public PropertyElement Dependiente
        {
            get
            {
                return dependiente;
            }
            set
            {
                if (dependiente != value)
                {
                    dependiente = value;
                    RaisePropertyChanged("Dependiente");
                }
            }
        }
        private PropertyElement dependiente;

        public PropertyElement MotivoConsulta
        {
            get
            {
                return motivoConsulta;
            }
            set
            {
                if (motivoConsulta != value)
                {
                    motivoConsulta = value;
                    RaisePropertyChanged("MotivoConsulta");
                }
            }
        }
        private PropertyElement motivoConsulta;

        public PropertyElement AntecedentesEnfermedad
        {
            get
            {
                return antecedentesEnfermedad;
            }
            set
            {
                if (antecedentesEnfermedad != value)
                {
                    antecedentesEnfermedad = value;
                    RaisePropertyChanged("AntecedentesEnfermedad");
                }
            }
        }
        private PropertyElement antecedentesEnfermedad;

        public TipoAntecedenteDTO[] TiposAntecedentes {get; set;}

        public List<AntecedenteDTO> AntecedentesCollection1
        {
            get
            {
                return antecedentesCollection1;
            }
            set
            {
                if (antecedentesCollection1 != value)
                {
                    antecedentesCollection1 = value;
                    RaisePropertyChanged("AntecedentesCollection1");
                }
            }
        }
        private List<AntecedenteDTO> antecedentesCollection1;

        public List<AntecedenteDTO> AntecedentesCollection2
        {
            get
            {
                return antecedentesCollection2;
            }
            set
            {
                if (antecedentesCollection2 != value)
                {
                    antecedentesCollection2 = value;
                    RaisePropertyChanged("AntecedentesCollection2");
                }
            }
        }
        private List<AntecedenteDTO> antecedentesCollection2;

        public TipoHabitoToxicoDTO[] TiposHabitosToxicos { get; set; }

        public List<HabitoToxicoDTO> HabitosToxicosCollection
        {
            get
            {
                return habitosToxicosCollection;
            }
            set
            {
                if (habitosToxicosCollection != value)
                {
                    habitosToxicosCollection = value;
                    RaisePropertyChanged("HabitosToxicosCollection");
                }
            }
        }
        private List<HabitoToxicoDTO> habitosToxicosCollection;

        public PropertyElement FrecuenciasCardiacas
        {
            get
            {
                return frecuenciasCardiacas;
            }
            set
            {
                if (frecuenciasCardiacas != value)
                {
                    frecuenciasCardiacas = value;
                    RaisePropertyChanged("FrecuenciasCardiacas");
                }
            }
        }
        private PropertyElement frecuenciasCardiacas;

        public PropertyElement VitalPulsoRadial
        {
            get
            {
                return vitalPulsoRadial;
            }
            set
            {
                if (vitalPulsoRadial != value)
                {
                    vitalPulsoRadial = value;
                    RaisePropertyChanged("VitalPulsoRadial");
                }
            }
        }
        private PropertyElement vitalPulsoRadial;

        public PropertyElement Ritmo
        {
            get
            {
                return ritmo;
            }
            set
            {
                if (ritmo != value)
                {
                    ritmo = value;
                    RaisePropertyChanged("Ritmo");
                }
            }
        }
        private PropertyElement ritmo;

        public PropertyElement PresionArterial
        {
            get
            {
                return presionArterial;
            }
            set
            {
                if (presionArterial != value)
                {
                    presionArterial = value;
                    RaisePropertyChanged("PresionArterial");
                }
            }
        }
        private PropertyElement presionArterial;

        public PropertyElement FrecuenciaRespiratoria
        {
            get
            {
                return frecuenciaRespiratoria;
            }
            set
            {
                if (frecuenciaRespiratoria != value)
                {
                    frecuenciaRespiratoria = value;
                    RaisePropertyChanged("FrecuenciaRespiratoria");
                }
            }
        }
        private PropertyElement frecuenciaRespiratoria;

        public PropertyElement PesoActual
        {
            get
            {
                return pesoActual;
            }
            set
            {
                if (pesoActual != value)
                {
                    pesoActual = value;
                    RaisePropertyChanged("PesoActual");
                }
            }
        }
        private PropertyElement pesoActual;

        public PropertyElement PesoHabitual
        {
            get
            {
                return pesoHabitual;
            }
            set
            {
                if (pesoHabitual != value)
                {
                    pesoHabitual = value;
                    RaisePropertyChanged("PesoHabitual");
                }
            }
        }
        private PropertyElement pesoHabitual;

        public PropertyElement Estatura
        {
            get
            {
                return estatura;
            }
            set
            {
                if (estatura != value)
                {
                    estatura = value;
                    RaisePropertyChanged("Estatura");
                }
            }
        }
        private PropertyElement estatura;

        public PropertyElement Temperatura
        {
            get
            {
                return temperatura;
            }
            set
            {
                if (temperatura != value)
                {
                    temperatura = value;
                    RaisePropertyChanged("Temperatura");
                }
            }
        }
        private PropertyElement temperatura;

        public PropertyElement Craneo
        {
            get
            {
                return craneo;
            }
            set
            {
                if (craneo != value)
                {
                    craneo = value;
                    RaisePropertyChanged("Craneo");
                }
            }
        }
        private PropertyElement craneo;

        public PropertyElement Ojo
        {
            get
            {
                return ojo;
            }
            set
            {
                if (ojo != value)
                {
                    ojo = value;
                    RaisePropertyChanged("Ojo");
                }
            }
        }
        private PropertyElement ojo;

        public PropertyElement Oido
        {
            get
            {
                return oido;
            }
            set
            {
                if (oido != value)
                {
                    oido = value;
                    RaisePropertyChanged("Oido");
                }
            }
        }
        private PropertyElement oido;

        public PropertyElement PFCG
        {
            get
            {
                return pfcg;
            }
            set
            {
                if (pfcg != value)
                {
                    pfcg = value;
                    RaisePropertyChanged("PFCG");
                }
            }
        }
        private PropertyElement pfcg;

        public PropertyElement CuelloPalpacion
        {
            get
            {
                return cuelloPalpacion;
            }
            set
            {
                if (cuelloPalpacion != value)
                {
                    cuelloPalpacion = value;
                    RaisePropertyChanged("CuelloPalpacion");
                }
            }
        }
        private PropertyElement cuelloPalpacion;

        public PropertyElement Tamaño
        {
            get
            {
                return tamaño;
            }
            set
            {
                if (tamaño != value)
                {
                    tamaño = value;
                    RaisePropertyChanged("Tamaño");
                }
            }
        }
        private PropertyElement tamaño;

        public PropertyElement CuelloAuscultacion
        {
            get
            {
                return cuelloAuscultacion;
            }
            set
            {
                if (cuelloAuscultacion != value)
                {
                    cuelloAuscultacion = value;
                    RaisePropertyChanged("CuelloAuscultacion");
                }
            }
        }
        private PropertyElement cuelloAuscultacion;

        public PropertyElement Forma
        {
            get
            {
                return forma;
            }
            set
            {
                if (forma != value)
                {
                    forma = value;
                    RaisePropertyChanged("Forma");
                }
            }
        }
        private PropertyElement forma;

        public PropertyElement ToraxMamas
        {
            get
            {
                return toraxMamas;
            }
            set
            {
                if (toraxMamas != value)
                {
                    toraxMamas = value;
                    RaisePropertyChanged("ToraxMamas");
                }
            }
        }
        private PropertyElement toraxMamas;

        public PropertyElement AuscultacionMV
        {
            get
            {
                return auscultacionMV;
            }
            set
            {
                if (auscultacionMV != value)
                {
                    auscultacionMV = value;
                    RaisePropertyChanged("AuscultacionMV");
                }
            }
        }
        private PropertyElement auscultacionMV;

        public PropertyElement AuscultacionVV
        {
            get
            {
                return auscultacionVV;
            }
            set
            {
                if (auscultacionVV != value)
                {
                    auscultacionVV = value;
                    RaisePropertyChanged("AuscultacionVV");
                }
            }
        }
        private PropertyElement auscultacionVV;

        public PropertyElement Rales
        {
            get
            {
                return rales;
            }
            set
            {
                if (rales != value)
                {
                    rales = value;
                    RaisePropertyChanged("Rales");
                }
            }
        }
        private PropertyElement rales;

        public PropertyElement Excursion
        {
            get
            {
                return excursion;
            }
            set
            {
                if (excursion != value)
                {
                    excursion = value;
                    RaisePropertyChanged("Excursion");
                }
            }
        }
        private PropertyElement excursion;

        public PropertyElement R1
        {
            get
            {
                return r1;
            }
            set
            {
                if (r1 != value)
                {
                    r1 = value;
                    RaisePropertyChanged("R1");
                }
            }
        }
        private PropertyElement r1;

        public PropertyElement R2
        {
            get
            {
                return r2;
            }
            set
            {
                if (r2 != value)
                {
                    r2 = value;
                    RaisePropertyChanged("R2");
                }
            }
        }
        private PropertyElement r2;

        public PropertyElement Soplos
        {
            get
            {
                return soplos;
            }
            set
            {
                if (soplos != value)
                {
                    soplos = value;
                    RaisePropertyChanged("Soplos");
                }
            }
        }
        private PropertyElement soplos;

        public PropertyElement PulsoCarotideo
        {
            get
            {
                return pulsoCarotideo;
            }
            set
            {
                if (pulsoCarotideo != value)
                {
                    pulsoCarotideo = value;
                    RaisePropertyChanged("PulsoCarotideo");
                }
            }
        }
        private PropertyElement pulsoCarotideo;

        public PropertyElement PulsoRadial
        {
            get
            {
                return pulsoRadial;
            }
            set
            {
                if (pulsoRadial != value)
                {
                    pulsoRadial = value;
                    RaisePropertyChanged("PulsoRadial");
                }
            }
        }
        private PropertyElement pulsoRadial;

        public PropertyElement PulsoFemoral
        {
            get
            {
                return pulsoFemoral;
            }
            set
            {
                if (pulsoFemoral != value)
                {
                    pulsoFemoral = value;
                    RaisePropertyChanged("PulsoFemoral");
                }
            }
        }
        private PropertyElement pulsoFemoral;

        public PropertyElement Pedio
        {
            get
            {
                return pedio;
            }
            set
            {
                if (pedio != value)
                {
                    pedio = value;
                    RaisePropertyChanged("Pedio");
                }
            }
        }
        private PropertyElement pedio;

        public PropertyElement AbdomenInspeccion
        {
            get
            {
                return abdomenInspeccion;
            }
            set
            {
                if (abdomenInspeccion != value)
                {
                    abdomenInspeccion = value;
                    RaisePropertyChanged("AbdomenInspeccion");
                }
            }
        }
        private PropertyElement abdomenInspeccion;

        public PropertyElement AbdomenPalpacion
        {
            get
            {
                return abdomenPalpacion;
            }
            set
            {
                if (abdomenPalpacion != value)
                {
                    abdomenPalpacion = value;
                    RaisePropertyChanged("AbdomenPalpacion");
                }
            }
        }
        private PropertyElement abdomenPalpacion;

        public PropertyElement AbdomenAuscultacion
        {
            get
            {
                return abdomenAuscultacion;
            }
            set
            {
                if (abdomenAuscultacion != value)
                {
                    abdomenAuscultacion = value;
                    RaisePropertyChanged("AbdomenAuscultacion");
                }
            }
        }
        private PropertyElement abdomenAuscultacion;

        public PropertyElement PPRenalDerecha
        {
            get
            {
                return pPRenalDerecha;
            }
            set
            {
                if (pPRenalDerecha != value)
                {
                    pPRenalDerecha = value;
                    RaisePropertyChanged("PPRenalDerecha");
                }
            }
        }
        private PropertyElement pPRenalDerecha;

        public PropertyElement PPRenalIzquierda
        {
            get
            {
                return pPRenalIzquierda;
            }
            set
            {
                if (pPRenalIzquierda != value)
                {
                    pPRenalIzquierda = value;
                    RaisePropertyChanged("PPRenalIzquierda");
                }
            }
        }
        private PropertyElement pPRenalIzquierda;

        public PropertyElement PPRenalMamas
        {
            get
            {
                return pPRenalMamas;
            }
            set
            {
                if (pPRenalMamas != value)
                {
                    pPRenalMamas = value;
                    RaisePropertyChanged("PPRenalMamas");
                }
            }
        }
        private PropertyElement pPRenalMamas;

        public PropertyElement Sensorio
        {
            get
            {
                return sensorio;
            }
            set
            {
                if (sensorio != value)
                {
                    sensorio = value;
                    RaisePropertyChanged("Sensorio");
                }
            }
        }
        private PropertyElement sensorio;

        public PropertyElement Lenguaje
        {
            get
            {
                return lenguaje;
            }
            set
            {
                if (lenguaje != value)
                {
                    lenguaje = value;
                    RaisePropertyChanged("Lenguaje");
                }
            }
        }
        private PropertyElement lenguaje;

        public PropertyElement Marcha
        {
            get
            {
                return marcha;
            }
            set
            {
                if (marcha != value)
                {
                    marcha = value;
                    RaisePropertyChanged("Marcha");
                }
            }
        }
        private PropertyElement marcha;

        public PropertyElement Temblor
        {
            get
            {
                return temblor;
            }
            set
            {
                if (temblor != value)
                {
                    temblor = value;
                    RaisePropertyChanged("Temblor");
                }
            }
        }
        private PropertyElement temblor;

        public PropertyElement Taxia
        {
            get
            {
                return taxia;
            }
            set
            {
                if (taxia != value)
                {
                    taxia = value;
                    RaisePropertyChanged("Taxia");
                }
            }
        }
        private PropertyElement taxia;

        public PropertyElement ReflejoFotomotor
        {
            get
            {
                return reflejoFotomotor;
            }
            set
            {
                if (reflejoFotomotor != value)
                {
                    reflejoFotomotor = value;
                    RaisePropertyChanged("ReflejoFotomotor");
                }
            }
        }
        private PropertyElement reflejoFotomotor;

        public PropertyElement ReflejosAcomodacion
        {
            get
            {
                return reflejosAcomodacion;
            }
            set
            {
                if (reflejosAcomodacion != value)
                {
                    reflejosAcomodacion = value;
                    RaisePropertyChanged("ReflejosAcomodacion");
                }
            }
        }
        private PropertyElement reflejosAcomodacion;

        public PropertyElement ReflejosOsteotendinosos
        {
            get
            {
                return reflejosOsteotendinosos;
            }
            set
            {
                if (reflejosOsteotendinosos != value)
                {
                    reflejosOsteotendinosos = value;
                    RaisePropertyChanged("ReflejosOsteotendinosos");
                }
            }
        }
        private PropertyElement reflejosOsteotendinosos;

        public PropertyElement Sensibilidad
        {
            get
            {
                return sensibilidad;
            }
            set
            {
                if (sensibilidad != value)
                {
                    sensibilidad = value;
                    RaisePropertyChanged("Sensibilidad");
                }
            }
        }
        private PropertyElement sensibilidad;

        public PropertyElement ColumnaCervical
        {
            get
            {
                return columnaCervical;
            }
            set
            {
                if (columnaCervical != value)
                {
                    columnaCervical = value;
                    RaisePropertyChanged("ColumnaCervical");
                }
            }
        }
        private PropertyElement columnaCervical;

        public PropertyElement Dorsal
        {
            get
            {
                return dorsal;
            }
            set
            {
                if (dorsal != value)
                {
                    dorsal = value;
                    RaisePropertyChanged("Dorsal");
                }
            }
        }
        private PropertyElement dorsal;

        public PropertyElement Lumbar
        {
            get
            {
                return lumbar;
            }
            set
            {
                if (lumbar != value)
                {
                    lumbar = value;
                    RaisePropertyChanged("Lumbar");
                }
            }
        }
        private PropertyElement lumbar;

        public PropertyElement Movilidad
        {
            get
            {
                return movilidad;
            }
            set
            {
                if (movilidad != value)
                {
                    movilidad = value;
                    RaisePropertyChanged("Movilidad");
                }
            }
        }
        private PropertyElement movilidad;

        public PropertyElement Dolor
        {
            get
            {
                return dolor;
            }
            set
            {
                if (dolor != value)
                {
                    dolor = value;
                    RaisePropertyChanged("Dolor");
                }
            }
        }
        private PropertyElement dolor;

        public PropertyElement Tumefaccion
        {
            get
            {
                return tumefaccion;
            }
            set
            {
                if (tumefaccion != value)
                {
                    tumefaccion = value;
                    RaisePropertyChanged("Tumefaccion");
                }
            }
        }
        private PropertyElement tumefaccion;

        public PropertyElement DiagnosticoPresuntivo
        {
            get
            {
                return diagnosticoPresuntivo;
            }
            set
            {
                if (diagnosticoPresuntivo != value)
                {
                    diagnosticoPresuntivo = value;
                    RaisePropertyChanged("DiagnosticoPresuntivo");
                }
            }
        }
        private PropertyElement diagnosticoPresuntivo;

        public PropertyElement MetodosComplementarios
        {
            get
            {
                return metodosComplementarios;
            }
            set
            {
                if (metodosComplementarios != value)
                {
                    metodosComplementarios = value;
                    RaisePropertyChanged("MetodosComplementarios");
                }
            }
        }
        private PropertyElement metodosComplementarios;

        public PropertyElement Tratamiento
        {
            get
            {
                return tratamiento;
            }
            set
            {
                if (tratamiento != value)
                {
                    tratamiento = value;
                    RaisePropertyChanged("Tratamiento");
                }
            }
        }
        private PropertyElement tratamiento;

        public AfiliadoDTO Afiliado { get; set; }

        public string OpcionPatologia
        {
            get
            {
                if (opcionPatologia == "NuevaPatologia")
                {
                    OpcionPatologiaNueva = Visibility.Visible;
                    OpcionPatologiaSeleccionar = Visibility.Collapsed;
                }
                else
                {
                    OpcionPatologiaNueva = Visibility.Collapsed;
                    OpcionPatologiaSeleccionar = Visibility.Visible;
                }
                return opcionPatologia;
            }
            set
            {
                if (opcionPatologia != value)
                {
                    opcionPatologia = value;
                    RaisePropertyChanged("OpcionPatologia");
                }
            }
        }
        private string opcionPatologia;

        public Visibility OpcionPatologiaNueva
        {
            get
            {
                return opcionPatologiaNueva;
            }
            set
            {
                if (opcionPatologiaNueva != value)
                {
                    opcionPatologiaNueva = value;
                    RaisePropertyChanged("OpcionPatologiaNueva");
                }
            }
        }
        private Visibility opcionPatologiaNueva;

        public Visibility OpcionPatologiaSeleccionar
        {
            get
            {
                return opcionPatologiaSeleccionar;
            }
            set
            {
                if (opcionPatologiaSeleccionar != value)
                {
                    opcionPatologiaSeleccionar = value;
                    RaisePropertyChanged("OpcionPatologiaSeleccionar");
                }
            }
        }
        private Visibility opcionPatologiaSeleccionar;

        public PatologiaDTO Patologia
        {
            get
            {
                return patologia;
            }
            set
            {
                if (patologia != value)
                {
                    patologia = value;
                    RaisePropertyChanged("Patologia");
                }
            }
        }
        private PatologiaDTO patologia;

        public string PatologiaId
        {
            get
            {
                return patologiaId;
            }
            set
            {
                if (patologiaId != value)
                {
                    patologiaId = value;
                    RaisePropertyChanged("PatologiaId");
                }
            }
        }
        private string patologiaId;


        public PatologiaDTO PatologiaNueva
        {
            get
            {
                return patologiaNueva;
            }
            set
            {
                if (patologiaNueva != value)
                {
                    patologiaNueva = value;
                    RaisePropertyChanged("PatologiaNueva");
                }
            }
        }
        private PatologiaDTO patologiaNueva;

        public PatologiaDTO[] PatologiasCollection
        {
            get
            {
                return patologiasCollection;
            }
            set
            {
                if (patologiasCollection != value)
                {
                    patologiasCollection = value;
                    RaisePropertyChanged("PatologiasCollection");
                }
            }
        }
        private PatologiaDTO[] patologiasCollection;

        public PropertyElement PatologiaNombre
        {
            get
            {
                return patologiaNombre;
            }
            set
            {
                if (patologiaNombre != value)
                {
                    patologiaNombre = value;
                    RaisePropertyChanged("PatologiaNombre");
                }
            }
        }
        private PropertyElement patologiaNombre;

        public PropertyElement PatologiaDescripcion
        {
            get
            {
                return patologiaDescripcion;
            }
            set
            {
                if (patologiaDescripcion != value)
                {
                    patologiaDescripcion = value;
                    RaisePropertyChanged("PatologiaDescripcion");
                }
            }
        }
        private PropertyElement patologiaDescripcion;

        public string SeleccionarPatologiaForeground
        {
            get
            {
                return seleccionarPatologiaForeground;
            }
            set
            {
                if (seleccionarPatologiaForeground != value)
                {
                    seleccionarPatologiaForeground = value;
                    RaisePropertyChanged("SeleccionarPatologiaForeground");
                }
            }
        }
        private string seleccionarPatologiaForeground;

        #endregion

        public NuevaHistoriaViewModel(Instancias instancias, AfiliadoDTO afiliado)
        {
            WS = new Service1SoapClient();

            Afiliado = afiliado;
            Instancias = instancias;
            InicializarPropiedades();
            CargarColecciones();
        }

        private void CargarColecciones()
        {
            TiposAntecedentes = WS.GetTiposAntecedentes();

            AntecedentesCollection1 = new List<AntecedenteDTO>();
            AntecedentesCollection2 = new List<AntecedenteDTO>();
            for (var i = 0; i < 20; i++)
            {
                var tipo = TiposAntecedentes.ElementAt(i);
                var ant = new AntecedenteDTO() { Tiene = "NO", TipoAntecedenteId = tipo.Id, Descripcion = tipo.Nombre };
                if (i < 10)
                    AntecedentesCollection1.Add(ant);
                else
                    AntecedentesCollection2.Add(ant);
            }

            TiposHabitosToxicos = WS.GetTiposHabitosToxicos();
            HabitosToxicosCollection = new List<HabitoToxicoDTO>();
            foreach (var tipo in TiposHabitosToxicos)
            {
                HabitosToxicosCollection.Add(new HabitoToxicoDTO() { NombreHabito = tipo.Nombre, Tiene = false, TipoHabitoId = tipo.Id });
            }
        }


        private void InicializarPropiedades()
        {
            SeleccionarPatologiaForeground = "White";
            PatologiasCollection = WS.GetPatologias();
            if (PatologiasCollection.Count() > 0)
                OpcionPatologia = "BuscarPatologia";
            else
                OpcionPatologia = "NuevaPatologia";

            NombreyApellido = String.Format("({0} {1})", Afiliado.Nombre.Trim(), Afiliado.Apellido.Trim());

            #region Inicializacion de propiedades
            AutovalidoTotal = new PropertyElement() { Foreground = "White", Name = "AutovalidoTotal" };
            AutovalidoParcial = new PropertyElement() { Foreground = "White", Name = "AutovalidoParcial" };
            Dependiente = new PropertyElement() { Foreground = "White", Name = "Dependiente" };
            MotivoConsulta = new PropertyElement() { Foreground = "White", Name = "MotivoConsulta", Validations = { ValidationType.Requerido } };
            FrecuenciasCardiacas = new PropertyElement() { Foreground = "White", Name = "FrecuenciasCardiacas" };
            AntecedentesEnfermedad = new PropertyElement() { Foreground = "White", Name = "AntecedentesEnfermedad" };
            VitalPulsoRadial = new PropertyElement() { Foreground = "White", Name = "VitalPulsoRadial" };
            Ritmo = new PropertyElement() { Foreground = "White", Name = "Ritmo" };
            PresionArterial = new PropertyElement() { Foreground = "White", Name = "PresionArterial" };
            FrecuenciaRespiratoria = new PropertyElement() { Foreground = "White", Name = "FrecuenciaRespiratoria" };
            PesoActual = new PropertyElement() { Foreground = "White", Name = "PesoActual" };
            PesoHabitual = new PropertyElement() { Foreground = "White", Name = "PesoHabitual" };
            Estatura = new PropertyElement() { Foreground = "White", Name = "Estatura" };
            Temperatura = new PropertyElement() { Foreground = "White", Name = "Temperatura" };
            Craneo = new PropertyElement() { Foreground = "White", Name = "Craneo" };
            Ojo = new PropertyElement() { Foreground = "White", Name = "Ojo" };
            Oido = new PropertyElement() { Foreground = "White", Name = "Oido" };
            PFCG = new PropertyElement() { Foreground = "White", Name = "PFCG" };
            CuelloPalpacion = new PropertyElement() { Foreground = "White", Name = "CuelloPalpacion" };
            CuelloAuscultacion = new PropertyElement() { Foreground = "White", Name = "CuelloAuscultacion" };
            Forma = new PropertyElement() { Foreground = "White", Name = "Forma" };
            ToraxMamas = new PropertyElement() { Foreground = "White", Name = "ToraxMamas" };
            AuscultacionMV = new PropertyElement() { Foreground = "White", Name = "AuscultacionMV" };
            AuscultacionVV = new PropertyElement() { Foreground = "White", Name = "AuscultacionVV" };
            Rales = new PropertyElement() { Foreground = "White", Name = "Rales" };
            Excursion = new PropertyElement() { Foreground = "White", Name = "Excursion" };
            R1 = new PropertyElement() { Foreground = "White", Name = "R1" };
            R2 = new PropertyElement() { Foreground = "White", Name = "R2" };
            Soplos = new PropertyElement() { Foreground = "White", Name = "Soplos" };
            PulsoCarotideo = new PropertyElement() { Foreground = "White", Name = "PulsoCarotideo" };
            PulsoRadial = new PropertyElement() { Foreground = "White", Name = "PulsoRadial" };
            PulsoFemoral = new PropertyElement() { Foreground = "White", Name = "PulsoFemoral" };
            Pedio = new PropertyElement() { Foreground = "White", Name = "Pedio" };
            AbdomenInspeccion = new PropertyElement() { Foreground = "White", Name = "AbdomenInspeccion" };
            AbdomenPalpacion = new PropertyElement() { Foreground = "White", Name = "AbdomenPalpacion" };
            AbdomenAuscultacion = new PropertyElement() { Foreground = "White", Name = "AbdomenAuscultacion" };
            PPRenalDerecha = new PropertyElement() { Foreground = "White", Name = "PPRenalDerecha" };
            PPRenalIzquierda = new PropertyElement() { Foreground = "White", Name = "PPRenalIzquierda" };
            PPRenalMamas = new PropertyElement() { Foreground = "White", Name = "PPRenalMamas" };
            Sensorio = new PropertyElement() { Foreground = "White", Name = "Sensorio" };
            Lenguaje = new PropertyElement() { Foreground = "White", Name = "Lenguaje" };
            Marcha = new PropertyElement() { Foreground = "White", Name = "Lenguaje" };
            Temblor = new PropertyElement() { Foreground = "White", Name = "Temblor" };
            Taxia = new PropertyElement() { Foreground = "White", Name = "Taxia" };
            ReflejoFotomotor = new PropertyElement() { Foreground = "White", Name = "ReflejoFotomotor" };
            ReflejosAcomodacion = new PropertyElement() { Foreground = "White", Name = "ReflejosAcomodacion" };
            ReflejosOsteotendinosos = new PropertyElement() { Foreground = "White", Name = "ReflejosOsteotendinosos" };
            Sensibilidad = new PropertyElement() { Foreground = "White", Name = "Sensibilidad" };
            ColumnaCervical = new PropertyElement() { Foreground = "White", Name = "ColumnaCervical" };
            Dorsal = new PropertyElement() { Foreground = "White", Name = "Dorsal" };
            Lumbar = new PropertyElement() { Foreground = "White", Name = "Lumbar" };
            Movilidad = new PropertyElement() { Foreground = "White", Name = "Movilidad" };
            Dolor = new PropertyElement() { Foreground = "White", Name = "Dolor" };
            Tumefaccion = new PropertyElement() { Foreground = "White", Name = "Tumefaccion" };
            Tamaño = new PropertyElement() { Foreground = "White", Name = "Tamaño" };
            DiagnosticoPresuntivo = new PropertyElement() { Foreground = "White", Name = "DiagnosticoPresuntivo" };
            MetodosComplementarios = new PropertyElement() { Foreground = "White", Name = "MetodosComplementarios" };
            Tratamiento = new PropertyElement() { Foreground = "White", Name = "Tratamiento" };
            PatologiaNombre = new PropertyElement() { Foreground = "White", Name = "PatologiaNombre" };
            PatologiaDescripcion = new PropertyElement() { Foreground = "White", Name = "PatologiaDescripcion" };
            #endregion

            #region Agregar para validacion
            
            //ValidationList.Add(MotivoConsulta);

            #endregion
        }


        #region Guardar Historia

        private DelegateCommand guardarCommand;

        public ICommand GuardarCommand
        {
            get
            {
                if (guardarCommand == null)
                {
                    guardarCommand = new DelegateCommand(Guardar, CanExecute);
                }
                return guardarCommand;
            }
        }

        private bool CanExecute()
        {
            return true;
        }

        private void Guardar()
        {
            //modalDialog.ShowHandlerDialog("Tu vieja me lastra la chota como una desquiciada");
            if (DataIsValid)
            {
                if (OpcionPatologia == "NuevaPatologia")
                {
                    if (string.IsNullOrEmpty(PatologiaNombre.Value))
                    {
                        PatologiaNombre.Foreground = "#bb0000";
                        RaisePropertyChanged("PatologiaNombre");
                        Instancias.ModalDialog.ShowHandlerDialog("Debe ingresar el nombre de la nueva patología");
                        return;
                    }
                    else
                    {
                        PatologiaNueva = new PatologiaDTO { Nombre = PatologiaNombre.Value, Descripcion = PatologiaDescripcion.Value };
                        PatologiaNueva.Id = WS.GuardarPatologia(PatologiaNueva);
                        HistoriaClinicaDTO HC = ArmarHistoriaClinica();
                        HC.Patologia = PatologiaNueva;
                        WS.NuevaHistoria(HC);
                        WS.GuardarEstadisticaPatologia(HC.Patologia.Id);
                        Instancias.ModalDialog.ShowHandlerDialog("La historia clínica se ha guardado correctamente");
                        Instancias.FrameContent.Content = new Home();
                    }
                }
                else
                {
                    if (string.IsNullOrEmpty(PatologiaId))
                    {
                        SeleccionarPatologiaForeground = "#bb0000";
                        RaisePropertyChanged("SeleccionarPatologiaForeground");
                        Instancias.ModalDialog.ShowHandlerDialog("Debe seleccionar una patología.");
                        return;
                    }
                    else
                    {
                        HistoriaClinicaDTO HC = ArmarHistoriaClinica();
                        HC.Patologia = new PatologiaDTO { Id = Convert.ToInt32(PatologiaId) };
                        WS.NuevaHistoria(HC);
                        WS.GuardarEstadisticaPatologia(HC.Patologia.Id);
                        Instancias.ModalDialog.ShowHandlerDialog("La historia clínica se ha guardado correctamente");
                        Instancias.FrameContent.Content = new Home();
                    }
                }
                
            }
            else
                Instancias.ModalDialog.ShowHandlerDialog("Los datos son inválidos. Revise haber completado los campos resaltados en el formato correcto.");
        }


        private HistoriaClinicaDTO ArmarHistoriaClinica()
        {
            var hc = new HistoriaClinicaDTO()
            {
                DiagnosticoPresuntivo = FormatHelper.FirstWordToUpper(DiagnosticoPresuntivo.Value),
                MetodosComplementarios = FormatHelper.FirstWordToUpper(MetodosComplementarios.Value),
                Tratamiento = FormatHelper.FirstWordToUpper(Tratamiento.Value),
                AfiliadoId = Afiliado.Id
            };

            hc.ConsultaInicial = ArmarConsultaInicial();
            hc.Antecedentes = ArmarAntecedentes();
            hc.HabitosToxicos = ArmarHabitosToxicos();
            hc.Abdomen = ArmarAbdomen();
            hc.Cuello = ArmarCuello();
            hc.OsteoMuscular = ArmarOsteoMuscular();
            hc.SignosVitales = ArmarSignosVitales();
            hc.SistemaNervioso = ArmarSistemaNervioso();
            hc.ExamenVarios = ArmarExamenVarios();
            
            return hc;
        }

        private ConsultaInicialDTO ArmarConsultaInicial()
        {
            return new ConsultaInicialDTO()
            {
                AutoValidoTotal = FormatHelper.FirstWordToUpper(AutovalidoTotal.Value),
                AutoValidoParcial = FormatHelper.FirstWordToUpper(AutovalidoParcial.Value),
                Dependiente = FormatHelper.FirstWordToUpper(Dependiente.Value),
                MotivoConsulta = FormatHelper.FirstWordToUpper(MotivoConsulta.Value),
                AntecedentesEnfermedad = FormatHelper.FirstWordToUpper(AntecedentesEnfermedad.Value)
            };
        }

        private AntecedenteDTO[] ArmarAntecedentes()
        {
            var lista = new List<AntecedenteDTO>();
            foreach (var a in AntecedentesCollection1)
            {
                if (a.Tiene == "SI")
                    lista.Add(a);
            }
            foreach (var a in AntecedentesCollection2)
            {
                if (a.Tiene == "SI")
                    lista.Add(a);
            }
            var l = new AntecedenteDTO[lista.Count];
            for (int i = 0; i < lista.Count; i++)
            {
                l[i] = lista.ElementAt(i);
            }

            return l;
        }

        private HabitoToxicoDTO[] ArmarHabitosToxicos()
        {
            var lista = new List<HabitoToxicoDTO>();
            foreach (var ht in HabitosToxicosCollection)
            {
                if (ht.Tiene)
                    lista.Add(ht);
            }

            var l = new HabitoToxicoDTO[lista.Count];
            for (int i = 0; i < lista.Count; i++)
            {
                l[i] = lista.ElementAt(i);
            }
            return l;
        }

        private ExamenVariosDTO ArmarExamenVarios()
        {
            return new ExamenVariosDTO()
            {
                Craneo = FormatHelper.FirstWordToUpper(Craneo.Value),
                Ojo = FormatHelper.FirstWordToUpper(Ojo.Value),
                Oido = FormatHelper.FirstWordToUpper(Oido.Value),
                PCFG = FormatHelper.FirstWordToUpper(PFCG.Value),
                ToraxForma = FormatHelper.FirstWordToUpper(Forma.Value),
                ToraxMamas = FormatHelper.FirstWordToUpper(ToraxMamas.Value),
                AuscultacionMV = FormatHelper.FirstWordToUpper(AuscultacionMV.Value),
                AuscultacionVV = FormatHelper.FirstWordToUpper(AuscultacionVV.Value),
                Rales = FormatHelper.FirstWordToUpper(Rales.Value),
                Excursion = FormatHelper.FirstWordToUpper(Excursion.Value),
                R1 = FormatHelper.FirstWordToUpper(R1.Value),
                R2 = FormatHelper.FirstWordToUpper(R2.Value),
                Soplos = FormatHelper.FirstWordToUpper(Soplos.Value),
                Carotideo = FormatHelper.FirstWordToUpper(PulsoCarotideo.Value),
                Radial = FormatHelper.FirstWordToUpper(PulsoRadial.Value),
                Femoral = FormatHelper.FirstWordToUpper(PulsoFemoral.Value),
                Pedio = FormatHelper.FirstWordToUpper(Pedio.Value),
                PPRenalDerecha = FormatHelper.FirstWordToUpper(PPRenalDerecha.Value),
                PPRenalIzquierda = FormatHelper.FirstWordToUpper(PPRenalIzquierda.Value),
                PPRenalMamas = FormatHelper.FirstWordToUpper(PPRenalMamas.Value)
            };
        }

        private SistemaNerviosoDTO ArmarSistemaNervioso()
        {
            return new SistemaNerviosoDTO()
            {
                Sensorio = FormatHelper.FirstWordToUpper(Sensorio.Value),
                Lenguaje = FormatHelper.FirstWordToUpper(Lenguaje.Value),
                Marcha = FormatHelper.FirstWordToUpper(Marcha.Value),
                Temblor = FormatHelper.FirstWordToUpper(Temblor.Value),
                Taxia = FormatHelper.FirstWordToUpper(Taxia.Value),
                ReflejosFotomotor = FormatHelper.FirstWordToUpper(ReflejoFotomotor.Value),
                ReflejosAcomodacion = FormatHelper.FirstWordToUpper(ReflejosAcomodacion.Value),
                OsteoTendinosos = FormatHelper.FirstWordToUpper(ReflejosOsteotendinosos.Value),
                Sensibilidad = FormatHelper.FirstWordToUpper(Sensibilidad.Value)
            };
        }

        private SignosVitalesDTO ArmarSignosVitales()
        {
            return new SignosVitalesDTO()
            {
                FrecuenciaCardiaca = FormatHelper.FirstWordToUpper(FrecuenciasCardiacas.Value),
                Estatura = FormatHelper.FirstWordToUpper(Estatura.Value),
                FrecuenciaRespiratoria = FormatHelper.FirstWordToUpper(FrecuenciaRespiratoria.Value),
                PesoActual = PesoActual.Value,
                PesoHabitual = PesoHabitual.Value,
                PresionArterial = PresionArterial.Value,
                PulsoRadial = VitalPulsoRadial.Value,
                Ritmo = FormatHelper.FirstWordToUpper(Ritmo.Value),
                Temperatura = FormatHelper.FirstWordToUpper(Temperatura.Value)
            };
        }

        private OsteoMuscularDTO ArmarOsteoMuscular()
        {
            return new OsteoMuscularDTO()
            {
                Cervical = FormatHelper.FirstWordToUpper(ColumnaCervical.Value),
                Dorsal = FormatHelper.FirstWordToUpper(Dorsal.Value),
                Lumbar = FormatHelper.FirstWordToUpper(Lumbar.Value),
                Movilidad = FormatHelper.FirstWordToUpper(Movilidad.Value),
                Dolor = FormatHelper.FirstWordToUpper(Dolor.Value),
                Tumefaccion = FormatHelper.FirstWordToUpper(Tumefaccion.Value)
            };
        }

        private CuelloDTO ArmarCuello()
        {
            return new CuelloDTO()
            {
                Auscultacion = FormatHelper.FirstWordToUpper(CuelloAuscultacion.Value),
                Palpacion = FormatHelper.FirstWordToUpper(CuelloPalpacion.Value),
                Tamaño = FormatHelper.FirstWordToUpper(Tamaño.Value)
            };
        }

        private AbdomenDTO ArmarAbdomen()
        {
            return new AbdomenDTO()
            {
                Inspeccion = FormatHelper.FirstWordToUpper(AbdomenInspeccion.Value),
                Palpacion = FormatHelper.FirstWordToUpper(AbdomenPalpacion.Value),
                Auscultacion = FormatHelper.FirstWordToUpper(AbdomenAuscultacion.Value)
            };
        }

        #endregion
    }
}
